"""
@Author : 合肥一元数智教育科技有限公司
@Date :  2025/10/30 8:42
@Description : 面向对象的特征
1. 封装   属性  隐私数据 salary   age  1-120  合法不合理
   隐藏类中的细节    以双下划线开头命名
      1. 属性私有化
      2. 方法公开化   get  set
在 Python 中，私有化主要是通过命名约定来实现的，而不是通过严格的访问控制机制，当你定义一个以双下划线开头的变量或方法时，
Python 会自动将其名称改写为 _类名__变量名 或 _类名__方法，Python 的设计理念是“程序员都是成年人”，即它不会强制限制某些操作，
而是通过约定和文档来指导程序员正确使用。私有化更多是一种约定，提醒程序员不要直接访问这些属性或方法，而不是绝对禁止
2.继承
3.多态
"""


class Emp:
    def __init__(self, name, age, salary):
        self.name = name
        if 1 < age < 120:
            self.__age = age
        else:
            self.__age = 10
        # salary  私有属性  外部无法访问
        self.__salary = salary

    # age set方法  修改数据
    def set_age(self, age):
        if 1 < age < 120:
            self.__age = age
        else:
            self.__age = 10

    # age get方法  获取属性值
    def get_age(self):
        return self.__age

    #  私有的方法
    def __method1(self):
        print('私有方法 method1 在类的内部使用 ')

    def method2(self):
        # 调用类内部的私有方法
        self.__method1()


# 创建员工对象
emp = Emp('张三', 20, 5000)
# 名字
print(emp.name)
# 薪资
# emp.salary
# age  set  get
print(emp.get_age())
emp.set_age(-30)
print(emp.get_age())

# 通过公开的方法 间接访问类中的私有方法
emp.method2()

print('--------------------------------------------')
# 私有的实现细节  底层实现时会修改属性名 方法名    ->  _类名__属性名
private_age = emp._Emp__age
print(private_age)

print('--------------------------------------------')
# _age = emp.__age
emp.__age = -10
print(emp.__age)
